iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 28
0
Software Development

我要轉職成 C# / .NET 工程師系列 第 28

委派 C# 2.0 與 匿名函式

  • 分享至 

  • xImage
  •  

昨天說委派讓我們可以傳遞方法,到C#2.0時委派語法有些簡化,也能實作匿名方法來傳遞。

C# 2.0簡化委派

昨天提到C#1.0的委派撰寫方式如下:
https://ithelp.ithome.com.tw/upload/images/20191014/20120420jv8QPJiQQa.png

省略new

省略new委派型別

而C#2.0可以省略new委派型別的字樣

委派 委派s = new 委派(通知A);  //省略前
委派 委派s = 通知A;   //省略後

昨天還說我們把方法交給委派物件來傳遞:

public class 計算
{
    public delegate void 委派();

    public void 計算總和(委派 被委派的事情)
    {
        int 總和 = 0;
        for (int j = 0; j <= 10; j++)
        {
            總和 = 總和 + j;
        }
        被委派的事情.Invoke();
    }
}

所以在C#2.0中使用計算物件中的委派,可以省略new委派型別
https://ithelp.ithome.com.tw/upload/images/20191014/20120420XynC6xGpUl.png

省略宣告委派型別

在C#2.0傳遞委派時也可以省略宣告委派型別,直接把通知A方法傳遞給計算總和方法:
https://ithelp.ithome.com.tw/upload/images/20191014/20120420XhkPPI7hw3.png

編譯後的IL

https://ithelp.ithome.com.tw/upload/images/20191014/20120420joRJWoxBAe.png

轉成C# 2.0

https://ithelp.ithome.com.tw/upload/images/20191014/201204200ncr2jHCOT.png

轉成C# 1.0

可以看到編譯器會自動幫我們將方法包裝成,傳入型別定義的new委派。
https://ithelp.ithome.com.tw/upload/images/20191014/20120420cojCTeUIOs.png

匿名函式 C# 2.0

C# 2.0開始提供匿名函式(方法就是函式),有些書會寫成匿名方法,意思是說,若我們要傳遞的方法很簡單,其實只有委派對象要用,可以delegate省略方法宣告。
例如以下通知A方法的動作只有console
https://ithelp.ithome.com.tw/upload/images/20191014/20120420IxqdvT0vbQ.png

不撰寫方法A的話,在C#2.0可以成以下匿名函式:

算數.計算總和( delegate {Console.WriteLine("報告A已經計算完成"); } );

沒有傳入值就不用寫括號,要寫括號也可以:
https://ithelp.ithome.com.tw/upload/images/20191014/20120420KgoJ633h4r.png

如果有傳入值就寫在括號裡:
https://ithelp.ithome.com.tw/upload/images/20191014/20120420CVTIAwfUp7.png


上一篇
委派 C#1.0
下一篇
C# 3.0 Lambda 表示式
系列文
我要轉職成 C# / .NET 工程師34
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言